<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.10"/>
<title>ipipsu: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="HTML_custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xlogo_bg.gif"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">ipipsu
   </div>
   <div id="projectbrief">Xilinx SDK Drivers API Documentation</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.10 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li class="current"><a href="index.html"><span>Overview</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="globals.html"><span>APIs</span></a></li>
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">ipipsu Documentation</div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This is the header file for implementation of IPIPSU driver. Inter Processor Interrupt (IPI) is used for communication between different processors on ZynqMP SoC. Each IPI register set has Trigger, Status and Observation registers for communication between processors. Each IPI path has a 32 byte buffer associated with it and these buffers are located in the XPPU RAM. This driver supports the following operations:</p>
<ul>
<li>Trigger IPIs to CPUs on the SoC</li>
<li>Write and Read Message buffers</li>
<li>Read the status of Observation Register to get status of Triggered IPI</li>
<li>Enable/Disable IPIs from selected Masters</li>
<li>Read the Status register to get the source of an incoming IPI</li>
</ul>
<p><b>Initialization</b> The config data for the driver is loaded and is based on the HW build. The <a class="el" href="struct_x_ipi_psu___config.html" title="This typedef contains configuration information for the device. ">XIpiPsu_Config</a> data structure contains all the data related to the IPI driver instance and also teh available Target CPUs.</p>
<p><b>Sending an IPI</b> The following steps can be followed to send an IPI:</p><ul>
<li>Write the Message into Message Buffer using <a class="el" href="group__ipipsu__v1__0.html#ga7bf5d424a4b76efcdd8b00503169e525" title="Send a Message to Destination. ">XIpiPsu_WriteMessage()</a></li>
<li>Trigger IPI using <a class="el" href="group__ipipsu__v1__0.html#ga8aa0005ec03abef3b3c1a506cb924e6e" title="Trigger an IPI to a Destination CPU. ">XIpiPsu_TriggerIpi()</a></li>
<li>Wait for Ack using <a class="el" href="group__ipipsu__v1__0.html#gaf633cefd9970c417079c0922577933e8" title="Poll for an acknowledgement using Observation Register. ">XIpiPsu_PollForAck()</a></li>
<li>Read response using <a class="el" href="group__ipipsu__v1__0.html#gad5a32e46f51220063673dfb5a34483ce" title="Read an Incoming Message from a Source. ">XIpiPsu_ReadMessage()</a></li>
</ul>
<dl class="section note"><dt>Note</dt><dd><a class="el" href="group__ipipsu__v1__0.html#ga4a62cac5d53ded4028a5f1586e390645" title="Get the OBSERVATION REGISTER of the current IPI instance. ">XIpiPsu_GetObsStatus()</a> before sending an IPI to ensure that the previous IPI was serviced by the target</dd></dl>
<p><b>Receiving an IPI</b> To receive an IPI, the following sequence can be followed:</p><ul>
<li>Register an interrupt handler for the IPIs interrupt ID</li>
<li>Enable the required sources using <a class="el" href="group__ipipsu__v1__0.html#gaa4e2694e0d28168f195f87583a34190c" title="Enable interrupts specified in Mask. ">XIpiPsu_InterruptEnable()</a></li>
<li>In the interrupt handler, Check for source using XIpiPsu_GetInterruptStatus</li>
<li>Read the message form source using <a class="el" href="group__ipipsu__v1__0.html#gad5a32e46f51220063673dfb5a34483ce" title="Read an Incoming Message from a Source. ">XIpiPsu_ReadMessage()</a></li>
<li>Write the response using <a class="el" href="group__ipipsu__v1__0.html#ga7bf5d424a4b76efcdd8b00503169e525" title="Send a Message to Destination. ">XIpiPsu_WriteMessage()</a></li>
<li>Ack the IPI using <a class="el" href="group__ipipsu__v1__0.html#ga2919c49f2a05d552dedb148069e84045" title="Clear the STATUS REGISTER of the current IPI instance. ">XIpiPsu_ClearInterruptStatus()</a></li>
</ul>
<dl class="section note"><dt>Note</dt><dd>XIpiPsu_Reset can be used at startup to clear the status and disable all sources </dd></dl>
</div></div><!-- contents -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Copyright &copy; 2015 Xilinx Inc. All rights reserved.</li>
  </ul>
</div>
</body>
</html>
